package common.utils;

import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;

import java.io.FileOutputStream;

public class MyBitMapUtil {
	  /**
	   * 转换图片成圆形
       * @param bitmap 传入Bitmap对象
       * @return
       */
      public static Bitmap toRoundBitmap(Bitmap bitmap) {
              int width = bitmap.getWidth();
              int height = bitmap.getHeight();
              float roundPx;
              float left,top,right,bottom,dst_left,dst_top,dst_right,dst_bottom;
              if (width <= height) {
                      roundPx = width / 2;
                      top = 0;
                      bottom = width;
                      left = 0;
                      right = width;
                      height = width;
                      dst_left = 0;
                      dst_top = 0;
                      dst_right = width;
                      dst_bottom = width;
              } else {
                      roundPx = height / 2;
                      float clip = (width - height) / 2;
                      left = clip;
                      right = width - clip;
                      top = 0;
                      bottom = height;
                      width = height;
                      dst_left = 0;
                      dst_top = 0;
                      dst_right = height;
                      dst_bottom = height;
              }
              
              Bitmap output = Bitmap.createBitmap(width,
                              height, Config.ARGB_8888);
              Canvas canvas = new Canvas(output);
              
              final int color = 0xff424242;
              final Paint paint = new Paint();
              final Rect src = new Rect((int)left, (int)top, (int)right, (int)bottom);
              final Rect dst = new Rect((int)dst_left, (int)dst_top, (int)dst_right, (int)dst_bottom);
              final RectF rectF = new RectF(dst);

              paint.setAntiAlias(true);
              
              canvas.drawARGB(0, 0, 0, 0);
              paint.setColor(color);
              canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

              paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
              canvas.drawBitmap(bitmap, src, dst, paint);
              return output;
      }
      /**
       * 把矩形图片变成圆形，并保存在指定位置
       * @param oldImagePath
       * @param newImagePath
       */
      public static void roundAndSaveBitmap(String oldImagePath,String newImagePath){
    	  
    	Bitmap oldBitmap = BitmapFactory.decodeFile(oldImagePath);
    	
      	FileOutputStream fileOutputStream = null;
		try {
			fileOutputStream = new FileOutputStream(newImagePath);
			toRoundBitmap(oldBitmap).compress(CompressFormat.PNG, 100, fileOutputStream);
		} catch (Exception e) {
			e.printStackTrace();
		}
		IOUtils.close(fileOutputStream);
      }
      /**
       * 把矩形图片变成圆形，并保存在指定位置
       * @param bitmap
       * @param newImagePath
       */
	public static void roundAndSaveBitmap(Bitmap bitmap, String newImagePath) {
			
		FileOutputStream fileOutputStream = null;
		try {
//			File file = new File(newImagePath);
//			if (file.exists()) {
//				file.delete();
//			}
			fileOutputStream = new FileOutputStream(newImagePath);
//			toRoundBitmap(bitmap).compress(CompressFormat.PNG, 100, fileOutputStream);
			bitmap.compress(CompressFormat.PNG, 100, fileOutputStream);
		} catch (Exception e) {
			e.printStackTrace();
		}
		IOUtils.close(fileOutputStream);
	}
      
}
